@echo off
chcp 65001 >nul
:: move.bat - 移动指定目录下的所有文件夹内的所有内容到指定目录
:: 需要移动的文件夹名称通过file.txt文件指定，每行一个文件夹名称

:: 设定源目录、目标目录和file.txt的路径
set "source_dir=d:\Code\test\win-file-cmd\target_dir"
set "target_dir=d:\Code\test\win-file-cmd\source_dir"
set "file_list=d:\Code\test\win-file-cmd\cmd\file.txt"

:: 检查源目录是否存在
if not exist "%source_dir%" (
    echo 错误：源目录不存在 - %source_dir%
    pause
    exit /b 1
)

:: 检查目标目录是否存在，不存在则创建
if not exist "%target_dir%" (
    mkdir "%target_dir%"
    if errorlevel 1 (
        echo 错误：无法创建目标目录 - %target_dir%
        pause
        exit /b 1
    )
)

:: 检查文件列表是否存在
if not exist "%file_list%" (
    echo 错误：文件列表不存在 - %file_list%
    pause
    exit /b 1
)

:: 循环读取文件列表中的每个文件夹名称
for /f "delims= tokens=*" %%a in (%file_list%) do (
    set "folder_name=%%a"
    setlocal enabledelayedexpansion
    
    :: 跳过空行
    if "!folder_name!"=="" goto continue
    
    :: 检查源目录中是否存在该文件夹
    if exist "%source_dir%\!folder_name!" (
        echo 正在移动：!folder_name!
        
        :: 检查目标目录中是否已存在同名文件夹
        if exist "%target_dir%\!folder_name!" (
            echo 警告：目标目录已存在!folder_name!，将覆盖现有内容
            rmdir /s /q "%target_dir%\!folder_name!" >nul 2>&1
        )
        
        :: 移动文件夹
        move /y "%source_dir%\!folder_name!" "%target_dir%\!folder_name!"
        if errorlevel 1 (
            echo 错误：移动!folder_name!失败
        ) else (
            echo 成功移动：!folder_name!
        )
    ) else (
        echo 警告：源目录中不存在文件夹 - !folder_name!
    )
    
    :continue
    endlocal
)

echo 移动操作已完成
pause